package com.zlx.rulemk.marketing.utils;

import com.zlx.rulemk.marketing.beans.EventBean;
import com.zlx.rulemk.marketing.beans.EventCondition;
import com.zlx.rulemk.marketing.beans.PropertiesBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author: zhanglingxing
 * @CreateTime: 2022-07-06
 * @Description: 触发事件比较工具类
 * @Version: 1.0
 */
@Slf4j
public class EventUtil {

    /**
     * 如果需要 判断触发事件是否等于具体的eventId，可以配置到 propertiesmap中
     * @param bean
     * @param ruleProps
     * @return
     */
    public static Boolean ComparProperties(EventBean bean, List<PropertiesBean> ruleProps) {

        if(ruleProps != null && ruleProps.size() > 0){ // 只有约束有的话 才进入循环，否则直接返回true
            for (PropertiesBean eventProp : ruleProps) {
                // 日志中规则key对应的具体值
                String eventValue = bean.getProperties().get(eventProp.getRuleProKey());
                // 日志中不存在规则要求的属性
                if(StringUtils.isBlank(eventValue)) return false;

                if(!ComparPropertiesUtils.ComparProperAchieve(eventValue,eventProp)){ //如果不匹配，直接返回false
                    return false;
                }
            }
        }
        return true;
    }


    /**
     * 判断事件字符串匹配正则的次数
     * TODO ： 这个地方需要好好测试 好像有bug
     * @param eventStr
     * @param pattern
     * @return
     */
    public static int sequenceStrMatchRegexCount(String eventStr, String pattern){
        Pattern r = Pattern.compile(pattern);
        Matcher matcher = r.matcher(eventStr);
        int count = 0;
        while(matcher.find()) count ++;
        //log.debug("字符串正则匹配,正则表达式：{}, 匹配结果为：{} ,字符串为：{} ",pattern,count,eventStr);
        return count;
    }


}
